package com.yjx.config;

import com.spire.doc.Document;
import com.spire.doc.DocumentObject;
import com.spire.doc.FileFormat;
import com.spire.doc.fields.omath.OfficeMath;

public class text {
    public static void main(String[] args) {
        Document doc = new Document();
        doc.loadFromFile("D:/测试.docx");
        //新公式
        String latex = "{F}=\\frac{3000×{\\beta }×{T}×\\left({D}+{d}\\right)}{{\\mu }×{Z}×\\left({{D}}^{2}+{D}×{d}+{{d}}^{2}\\right)}={ }{e}";
        //旧公式的MathMLCode
        String mathcode = "<mml:math xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:mml=\"http://www.w3.org/1998/Math/MathML\"><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:mfrac><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mi>D</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>Z</mml:mi><mml:mi>a</mml:mi></mml:mrow></mml:mfrac></mml:math>";
        for(int i=0;i<doc.getSections().getCount();i++){
            for(int j=0;j<doc.getSections().get(i).getParagraphs().getCount();j++){
                for(int k=0;k<doc.getSections().get(i).getParagraphs().get(j).getChildObjects().getCount();k++){
                    DocumentObject obj =doc.getSections().get(i).getParagraphs().get(j).getChildObjects().get(k);
                    //判断DocumentObject是否是officeMath
                    if (obj instanceof OfficeMath) {
                        OfficeMath math=(OfficeMath)doc.getSections().get(i).getParagraphs().get(j).getChildObjects().get(k);
                        //获取公式的MathMLCode与想要替换的公式的MathMLCode进行对比
                        if (math.toMathMLCode().equals(mathcode)){
                            //创建新的officeMath
                            OfficeMath officeMath = new OfficeMath(doc);
                            officeMath.fromLatexMathCode(latex);
                            //将新创建的officeMath添加到要替换的公式后面
                            doc.getSections().get(i).getParagraphs().get(j).getChildObjects().insert(k+1,officeMath);
                            //删除旧公式
                            doc.getSections().get(i).getParagraphs().get(j).getChildObjects().removeAt(k);
                        }

                    }
                }
            }
        }
        doc.saveToFile("D:/result.docx", FileFormat.Docx_2013);





//        Document doc = new Document();
//        doc.loadFromFile("D:/测试.docx");
//        String[] latexMathCode = new String[]{
//                "A \\cap\\left(\\complement_{v} B\\right)", "x^{2}+\\\\sqrt{x^{2}+1}=2",
//                "\\varnothing",
//                "\\begin{cases} 1 & \\mbox{if $x>0$,} \\\\ 2 & \\mbox{otherwise.} \\end{cases}",
//                " a_{1}=1, \\quad a_{n+1}=a_{n}+\\frac{a_{n}{ }^{2}}{n(n+1)}\\left(n \\in N^{*}\\right) ." };
//
//        int index = 0;
//        for(int i=0;i<doc.getSections().getCount();i++){
//            for(int j=0;j<doc.getSections().get(i).getParagraphs().getCount();j++){
//                for(int k=0;k<doc.getSections().get(i).getParagraphs().get(j).getChildObjects().getCount();k++){
//                    DocumentObject obj =doc.getSections().get(i).getParagraphs().get(j).getChildObjects().get(k);
//                    //判断DocumentObject是否是officeMath
//                    if (obj instanceof OfficeMath) {
//                        OfficeMath math=(OfficeMath)doc.getSections().get(i).getParagraphs().get(j).getChildObjects().get(k);
//                        //创建新的officeMath
//                        OfficeMath officeMath = new OfficeMath(doc);
//                        officeMath.fromLatexMathCode(latexMathCode[index]);
//                        //将新创建的officeMath添加到要替换的公式后面
//                        doc.getSections().get(i).getParagraphs().get(j).getChildObjects().insert(k+1,officeMath);
//                        //删除旧公式
//                        doc.getSections().get(i).getParagraphs().get(j).getChildObjects().removeAt(k);
//                        index++;
//                    }
//                }
//            }
//        }
//        doc.saveToFile("D:/result.docx", FileFormat.Docx_2013);




    }
}
